﻿#region librerías que necesitamos
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Librerias;
using System.Collections;
#endregion

namespace eCampus
{
    /// <summary>
    /// Formulario Padre de Profesor
    /// </summary>
    public partial class FormPadreProfesor : Form
    {
        #region Datos 
        int botonInhabilitado = 1;

        DateTime fechaSesion;

        FormPrincipalProfesor fPrincipal = null;
        FormMensajeConsultar fMensajes = null;
        FormNoticiaConsultar fNoticias = null;
        FormEventoConsultar fEventos = null;
        FormBuscaAvanzada fBuscaAvanzada = null;
        FormResultadoBuscaAvanzada fResultadosBuscaAvanzada = null;
        FormMaterialConsultar fMateriales = null;
        FormBibliografiaConsultar fBibliografia = null;
        FormEvaluacion fEvaluacion = null;
        //FormBusquedaAvanzada fBusquedaAvanzada = null;

        ArrayList listaAsignaturas;
        ENUsuario profesor;
        ENAsignatura asignatura;
        #endregion

        #region Constructor por defecto: a partir de un Usuario
        /// <summary>
        /// Constructor a partir de un Usuario
        /// </summary>
        /// <param name="datos">Usuario que excita la ejecución del formulario</param>
        public FormPadreProfesor(ENUsuario datos)
        {
            fechaSesion = DateTime.Now;
            profesor = datos;
            
            InitializeComponent();
            CargaAsignaturas();

            lanzarBuscaAvanzada();
           // CargaPrincipal();
            fBuscaAvanzada.Shown += new EventHandler(fBuscaAvanzada_Shown);


            fResultadosBuscaAvanzada.setFBuscador(fBuscaAvanzada);
            fBuscaAvanzada.setFResultados(fResultadosBuscaAvanzada);

        }
        #endregion
        
        
        /// <summary>
        /// Crea el vector de asignaturas del profesor,
        /// los items del ComboBox asignaturas,
        /// y selecciona la primera asignatura de la lista.
       /// </summary>

       public void CargaAsignaturas()
       {
           ENAsignatura asigs = new ENAsignatura();

           try
           {
               listaAsignaturas = asigs.ConsultaAsignaturasProfesor(profesor.Correo);

               if (listaAsignaturas.Count == 0)
               {
                   throw new Exception("Error. Este profesor no tiene asignaturas.");
               }
               cbAsignaturaSeleccionada.Items.Clear();
               foreach (ENAsignatura asi in listaAsignaturas)
               {
                   cbAsignaturaSeleccionada.Items.Add(asi.Nombre);
               }
               cbAsignaturaSeleccionada.SelectedIndex = 0;
               asignatura = (ENAsignatura)listaAsignaturas[0];
           }
           catch (Exception e)
           {
               MessageBox.Show(e.StackTrace + "\r\n" + e.Message);
           }
       }

        public object getListaAsigs()
        {
            return cbAsignaturaSeleccionada.Items;
        }

        public int getNumAsigs()
        {
            return cbAsignaturaSeleccionada.Items.Count;
        }

        void CargaPrincipal()
        {
            if (fPrincipal == null)
            {
                fPrincipal = new FormPrincipalProfesor(this, profesor.Correo, asignatura.Codigo);
                fPrincipal.MdiParent = this;
                fPrincipal.Show();
                fPrincipal.Dock = DockStyle.Fill;
            }
            else
            {
                fPrincipal.Focus();
            }

            DeshabilitaBoton(1);
        }

        /// <summary>
        /// Función para trabajar con la busqueda avanzada
        /// </summary>
        private void lanzarBuscaAvanzada()
        {
            if (fBuscaAvanzada == null)
            {
                fBuscaAvanzada = new FormBuscaAvanzada(0);
                fBuscaAvanzada.MdiParent = this;
                fBuscaAvanzada.Dock = DockStyle.Fill;

                fResultadosBuscaAvanzada = new FormResultadoBuscaAvanzada();
                fResultadosBuscaAvanzada.MdiParent = this;
                fResultadosBuscaAvanzada.Dock = DockStyle.Fill;

                fResultadosBuscaAvanzada.Show();

            }
        }
        #region Botones laterales

        /// <summary>
        /// Gestiona la habilitación entidadUsuario inhabilitación de los botones.
        /// Rehabilita el botón antiguo entidadUsuario inhabilita el nuevo.
        /// "botonInhabilitado" indica el botón antiguo.
        /// </summary>
        /// <param name="nuevo">El boton a deshabilitar</param>
        void DeshabilitaBoton(int nuevo)
        {

            //Rehabilita antiguo
            switch (botonInhabilitado)
            {
                case 1:
                    fPrincipal = null;
                    btPrincipal.Enabled = true;
                    botonInhabilitado = nuevo;
                    break;
                case 2:
                    btMensajes.Enabled = true;
                    botonInhabilitado = nuevo;
                    break;
                case 3:
                    btNoticias.Enabled = true;
                    botonInhabilitado = nuevo;
                    break;
                case 4:
                    btEventos.Enabled = true;
                    botonInhabilitado = nuevo;
                    break;
                case 5:
                    btMateriales.Enabled = true;
                    botonInhabilitado = nuevo;
                    break;
                case 6:
                    btBibliografia.Enabled = true;
                    botonInhabilitado = nuevo;
                    break;
                case 7:
                    btEvaluacion.Enabled = true;
                    botonInhabilitado = nuevo;
                    break;
                case 8:
                    btBuscar.Enabled = true;
                    botonInhabilitado = nuevo;
                    break;
            }

            //Deshabilita nuevo y cambia título
            switch (nuevo)
            {
                case 1:
                    btPrincipal.Enabled = false;
                    break;
                case 2:
                    btMensajes.Enabled = false;
                    break;
                case 3:
                    btNoticias.Enabled = false;
                    break;
                case 4:
                    btEventos.Enabled = false;
                    break;
                case 5:
                    btMateriales.Enabled = false;
                    break;
                case 6:
                    btBibliografia.Enabled = false;
                    break;
                case 7:
                    btEvaluacion.Enabled = false;
                    break;
                case 8:
                    btBuscar.Enabled = false;
                    break;
            }

        }

        private void fBuscaAvanzada_Shown(Object sender, EventArgs e)
        {
            DeshabilitaBoton(8);
        }

        public void SetAsignatura(int index)
        {
            cbAsignaturaSeleccionada.SelectedIndex = index;
        }

        private void btPrincipal_Click(object sender, EventArgs e)
        {
            CargaPrincipal();
        }


       

        /// <summary>
        /// Levanta formulario de Mensajes
        /// </summary>
        /// <param name="sender">btMensajes</param>
        /// <param name="entidadUsuario">Evento click</param>
        public void btMensajes_Click(object sender, EventArgs e)
        {
            if (fMensajes == null)
            {
                fMensajes = new FormMensajeConsultar(profesor.Correo);
                fMensajes.MdiParent = this;
                fMensajes.Show();

                fMensajes.Dock = DockStyle.Fill;
            }
            else
            {
                fMensajes.Focus();
            }

            DeshabilitaBoton(2);
        }

        /// <summary>
        /// Levanta el formulario de Noticias
        /// </summary>
        /// <param name="sender">Botón "btNoticias"</param>
        /// <param name="entidadUsuario">Evento click</param>
        public void btNoticias_Click(object sender, EventArgs e)
        {
            if (fNoticias == null)
            {
                
                ENNoticias notCriada = new ENNoticias();

                //1º compruebo que la asignatura de cbAsignaturaSeleccionada es una asignatura válida
                if (notCriada.EsAsignatura(cbAsignaturaSeleccionada.Text) == true)
                {
                    //si es asignatura válida llamo al formulario y mostrará las noticias de esta
                    fNoticias = new FormNoticiaConsultar(profesor.Correo, cbAsignaturaSeleccionada.Text);
                }
                    //si no es válida (vacía, etc.) mostrará todas las noticias     
                else
                    {
                        fNoticias = new FormNoticiaConsultar(profesor.Correo,asignatura.Codigo);  
                    }
       
                fNoticias.MdiParent = this;
                fNoticias.Show();
                fNoticias.Dock = DockStyle.Fill;
            }
            else
            {
                fNoticias.Focus();
            }

            DeshabilitaBoton(3);
        }

        /// <summary>
        /// Levanta formulario de Eventos
        /// </summary>
        /// <param name="sender">btEventos</param>
        /// <param name="entidadUsuario">Evento click</param>
        public void btEventos_Click(object sender, EventArgs e)
        {
            if (fEventos == null)
            {
                fEventos = new FormEventoConsultar(profesor.Correo, asignatura.Codigo);
                fEventos.MdiParent = this;
                fEventos.Show();
                fEventos.Dock = DockStyle.Fill;
            }
            else
            {
                fEventos.Focus();
            }

            DeshabilitaBoton(4);
        }

        /// <summary>
        /// Levanta formulario de Materiales
        /// </summary>
        /// <param name="sender">botón btMateriales</param>
        /// <param name="entidadUsuario">Evento click</param>
        public void btMateriales_Click(object sender, EventArgs e)
        {
            if (fMateriales == null)
            {
                fMateriales = new FormMaterialConsultar(profesor.Correo, asignatura.Codigo);
                fMateriales.MdiParent = this;
                fMateriales.Show();
                fMateriales.Dock = DockStyle.Fill;
            }
            else
            {
                fMateriales.Focus();
            }

            DeshabilitaBoton(5);
        }
        /// <summary>
        /// Nos permitirá Bloquear la Pantalla por si queremos ausentarnos
        /// </summary>
        /// <param name="sender">btBloquear</param>
        /// <param name="entidadUsuario">Evento click</param>
        public void btBloquear_Click(object sender, EventArgs e)
        {
            Hide();
            FormBloqueo b = new FormBloqueo(profesor.Correo, profesor.Contraseña);
            b.ShowDialog();
            Show();
        }
        /// <summary>
        /// Le preguntará al usuario si desea cerrar la aplicación
        /// </summary>
        /// <param name="sender">btCerrarSesion</param>
        /// <param name="entidadUsuario">Evento Click</param>
        public void btCerrarSesion_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea cerrar sesión?", "Cerrar sesión", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                FormLogin l = new FormLogin();
                Visible = false;
                l.ShowDialog();
                l.Close();
            }
        }
        /// <summary>
        /// Levanta formulario de Bibliografía
        /// </summary>
        /// <param name="sender">btBibliografia</param>
        /// <param name="entidadUsuario">Evento click</param>
        public void btBibliografia_Click(object sender, EventArgs e)
        {
            if (fBibliografia == null)
            {
                fBibliografia = new FormBibliografiaConsultar(profesor.Correo, asignatura.Codigo);
                fBibliografia.MdiParent = this;
                fBibliografia.Show();
                fBibliografia.Dock = DockStyle.Fill;
            }
            else
            {
                fBibliografia.Focus();
            }

            DeshabilitaBoton(6);
        }
        /// <summary>
        /// Levanta formulario de Evaluación
        /// </summary>
        /// <param name="sender">btEvaluacion</param>
        /// <param name="entidadUsuario">Evento click</param>
        public void btEvaluacion_Click(object sender, EventArgs e)
        {
            if (fEvaluacion == null)
            {
                fEvaluacion = new FormEvaluacion(profesor.Correo,asignatura.Codigo);
                fEvaluacion.MdiParent = this;
                fEvaluacion.Show();
                fEvaluacion.Dock = DockStyle.Fill;
            }
            else
            {
                fEvaluacion.Focus();
            }

            DeshabilitaBoton(7);
        }
        /// <summary>
        /// Levanta formulario de búsqueda
        /// </summary>
        /// <param name="sender">btBuscar</param>
        /// <param name="entidadUsuario">Evento click</param>
        public void btBuscar_Click(object sender, EventArgs e)
        {
            fBuscaAvanzada.Show();
            fBuscaAvanzada.Focus();
            DeshabilitaBoton(8);
        }
#endregion

        #region Menú "información de sesión"
        /// <summary>
        /// Nos informará de cómo nos hemos autenticado en la aplicación
        /// </summary>
        /// <param name="sender">informaciónDeSesiónToolStripMenuItem</param>
        /// <param name="entidadUsuario">Evento click</param>
        private void informaciónDeSesiónToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show(
                "Nombre de usuario:\t" + profesor.Correo + 
                "\nHora de creación:\t" + fechaSesion.ToString() + 
                "\nNombre del sistema:\t" + System.Environment.MachineName , "Información de sesión", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2);
        }
        #endregion
        #region Menú "Acerca de..."
        /// <summary>
        /// Levanta formulario "Acerca de..."
        /// </summary>
        /// <param name="sender">acercaDeECampusToolStripMenuItem</param>
        /// <param name="entidadUsuario">Evento click</param>
        private void acercaDeECampusToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FormAcercaDe p = new FormAcercaDe();
            p.ShowDialog();
            p.Dispose();
        }
        #endregion

        /// <summary>
        /// Función para cerrar formularios hijos
        /// </summary>
        private void DestruyeFormulariosHijos()
        {
            if (fNoticias != null)
            {
                        fNoticias.Close();
                        fNoticias = null;
            }
            if (fEventos != null)
            {
                        fEventos.Close();
                        fEventos = null;
            }
            if (fMateriales != null)
            {
                        fMateriales.Close();
                        fMateriales = null;
            }
            if (fBibliografia != null)
            {
                        fBibliografia.Close();
                        fBibliografia = null;
            }
            if (fEvaluacion != null)
            {
                        fEvaluacion.Close();
                        fEvaluacion = null;
            }
        }


        public string GetAsignatura()
        {
            return cbAsignaturaSeleccionada.Text;
        }

        private void cbAsignaturaSeleccionada_SelectedIndexChanged(object sender, EventArgs e)
        {
            CADAsignatura asig = new CADAsignatura();
            /*
            //Lo comunica a la página principal
            if (fPrincipal != null)
            {
                fPrincipal.SetAsignatura(cbAsignaturaSeleccionada.SelectedIndex);
            }*/

            fPrincipal = null;

            //Actualiza la asignatura
            foreach (ENAsignatura asi in listaAsignaturas)
            {
                if (asi.Nombre == cbAsignaturaSeleccionada.Text)
                {
                    asignatura = asi;
                    break;
                }
            }

            //Destruye los formularios anticuados
            DestruyeFormulariosHijos();

            //Genera el formulario actual
            switch (botonInhabilitado)
            {
                case 1:
                    CargaPrincipal();
                    break;
                case 2:
                    btMensajes_Click(sender, e);
                    break;
                case 3:
                    btNoticias_Click(sender, e);
                    break;
                case 4:
                    btEventos_Click(sender, e);
                    break;
                case 5:
                    btMateriales_Click(sender, e);
                    break;
                case 6:
                    btBibliografia_Click(sender, e);
                    break;
                case 7:
                    btEvaluacion_Click(sender, e);
                    break;
                case 8:
                    btBuscar_Click(sender, e);
                    break;
            }

            
        }

        private void FormPadreProfesor_FormClosing(object sender, FormClosingEventArgs e)
        {
            Application.Exit();
        }

        private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {

        }

        private void FormPadreProfesor_Load(object sender, EventArgs e)
        {
            CargaPrincipal();
        }

        private void modificarPerfilToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FormPerfil p = new FormPerfil(profesor.Correo);
            p.ShowDialog();
            p.Dispose();
        }

        private void bandejaDeEntradaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            btMensajes.PerformClick();
            fMensajes.GoToRecibidos();
        }

        private void mensajesEnviadosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            btMensajes.PerformClick();
            fMensajes.GoToEnviados();
        }

        private void nuevoMensajeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            btMensajes.PerformClick();
            fMensajes.btNuevo_Click(null, null);
        }

        private void contactarConAdministradorToolStripMenuItem_Click(object sender, EventArgs e)
        {
            btMensajes.PerformClick();
            fMensajes.ContactarAdmin();
        }

        private void salirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea salir de eCampus?", "Salir", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                Application.Exit();
            }
        }
    }
}
